package com.example.kotlindemo

import android.content.Context
import android.widget.Toast

/**
 * @author Lmy
 * @功能:扩展函数的使用
 * @Creat 2020/5/13 22:29
 * @Compony 永远相信美好的事物即将发生
 */
object kuozhanhanshu {

    /**
     * 这个方法时标准的java思想的
     * 计算一个字符串中的字母数量的个数
     *
     **/
    fun lettersCount(string: String): Int {
        var number = 0
        for (char in string) {
            print("$char\n")
            if (char.isLetter()) {
                number++
            }
        }
        print("字母的个数是$number")
        return number
    }

    /**
     *定义扩展函数的语法
     *
    fun ClassName.methodName(parms1: Int, Parms2: Int): Int {
    return 0
    }
     */


    /**
     *这里将leeterCount定义为了String的扩展函数
     * 因为是String 的扩展函数那么 函数内部就有了String的上下文 leeterCount就不要要接收参数了
     * 直接遍历this即可 此时this就是String本身
     * 调用时只需要 “”.leeterCount()即可
     *
     */
    fun String.leeterCount(): Int {
        var number = 0
        for (char in this) {
            print("$char\n")
            if (char.isLetter()) {
                number++
            }
        }
        print("字母的个数是$number")
        return number
    }

    /**
     * 利用扩展函数封装全局的Toast
     *
     */
    fun Context.toast(string: String) {
        Toast.makeText(this, string, Toast.LENGTH_LONG).show()
    }


    /**
     * kotlin区间的简单使用
     */
    fun forceshi() {


        print("循环输出：")
        for (i in 1..4) print(i) // 输出“1234”
        println("\n----------------")
        print("设置步长：")
        for (i in 1..4 step 2) print(i) // 输出“13”
        println("\n----------------")
        print("使用 downTo：")
        /**
         *如果希望倒序遍历的话可以使用downTo关键词 downTo后面指定的是倒叙遍历指定的最后Index
         */
        for (i in 4 downTo 1 step 2) print(i) // 输出“42”
        println("\n----------------")
        print("使用 until：")
        // 使用 until 函数排除结束元素
        for (i in 1 until 10) {   // i in [1, 4) 排除了 4   数学中的左闭右开区间
            print(i)
        }
        println("\n----------------")
        print("闭区间：")
        // 使用 until 函数排除结束元素
        for (i in 1..10) {   // 从1到10 [1,10] 闭区间
            print(i)
        }


        /**
         *kotlin中的返回和跳转
         *
         */
        for (i in 1..10) {
            if (i == 3) continue  // i 为 3 时跳过当前循环，继续下一次循环
            println(i)
            if (i > 5) break   // i 为 6 时 跳出循环
        }
    }

    /**
     * 判断值是否相同  地址是否相同
     * kotlin中用==判断值是都相同  ===判断值和地址是否相同
     *
     */
    fun isvalue() {
        val a: Int = 10000
        println(a === a) // true，值相等，对象地址相等

        //经过了装箱，创建了两个不同的对象
        val boxedA: Int? = a
        val anotherBoxedA: Int? = a

        //虽然经过了装箱，但是值是相等的，都是10000
        println(boxedA === anotherBoxedA) //  false，值相等，对象地址不一样
        println(boxedA == anotherBoxedA) // true，值相等
    }


    fun panduan(n: Any) {

        val x = 5
        val y = 9
        if (x in 1..8) println("x 在区间内")//判断 x是否正在1..8的区间中
        when (n) {
            is String -> {
                println("x 属于String类型")
            }
            else -> println("x 不在该区间范围内")
        }
    }



}
